home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Software Vault: The Gold Collection
/
Software Vault - The Gold Collection (American Databankers) (1993).ISO
/
cdr35
/
wfs300.zip
/
WFSUGREF.DOC
< prev
next >
Wrap
Text File
|
1993-06-19
|
107KB
|
4,225 lines
Waffle File Server (WFS)
A Mail Based Archive Server
for MS-DOS Waffle BBS
User Guide and Reference
Release 3.0
18 June 1993
Lawrence T. Hardiman
The Birdsong Company
PO Box 2031
Sunnyvale CA, 94087-2031
larry@Birdsong.Suvl.CA.US
Abstract:
Waffle File Server (WFS) is "Add-On" software for the MS-DOS
version of Waffle BBS. WFS extends Waffle's capability by
providing a Mail Based Archive Server (MBAS), an Automatic
Mailing Server (AutoMail), a Remote Command Execution Facility,
and a Mailing List Server.
This document provides a Waffle SysOp with information on how to
install, customize and operate WFS.
WFS is ShareWare.
_________________________________________________________________
Copyright 1993, The Birdsong Company, Sunnyvale California USA
ALL RIGHTS RESERVED
- ii -
Preface
ShareWare
Waffle File Server (WFS) is SHAREWARE. WFS is not FreeWare. WFS
is not in the public domain.
You may install and try WFS for up to 30 days. If you intend to
use WFS beyond the trial period, you must license it.
The License for individuals is $20.00 US where payment is made by
check in US Dollars drawn on a US branch of a US bank.
The License for individuals outside the United States is $25.00
US. You may pay by check drawn on your local bank, in your local
currency. The extra $5.00 is what my bank charges me to process
your check.
Commercial Enterprise, Government Agencies, Educational
Institutions, and Not-for-Profits may try WFS for up to 30 days.
Beyond the trial period, you must be licensed to use it. To get a
quote for your use, send a Request for Price Quotation (RFP) on
your company's or organization's letterhead.
The Birdsong Company will respond with a price quotation.
Enterprise Licenses are available. Ask! I'm generally reasonable
on terms.
The file LICENSE.FRM (a License Form), included in the WFS
distribution, is the standard license agreement.
To register WFS, print the file LICENSE.FRM, included in this
distribution, fill in the blanks, sign it, and mail it with your
registration fee to The Birdsong Company at the address shown on
the form.
The WFS executable programs issue a modest "NagWare" message at
program startup, then pause for 5 seconds before continuing.
Registered users will recieve copies of the executable programs
that do not exhibit this behavior.
Disclaimer of Warrantee
The Birdsong Company provides WFS "As Is" and disclaims all
warranties relating to the WFS software, express or implied,
including without limitation any implied warranties of
merchantability or fitness for a particular purpose. The Birdsong
Company will not be liable for any special, incidental,
consequential, indirect or similar damages due to loss of data or
- iii -
any other reason, even if The Birdsong Company has been advised
of the possibility of such damages. In no event shall The
Birdsong Company's liability for any damages ever exceed the
price paid for the license to use the software.
- iv -
Contents
Chapter 1 What's New in This Release 7
Chapter 2 Introduction 8
2.1 Overview . . . . . . . . . . . . . . . . . . 8
2.2 Mail Based Archive Server . . . . . . . . . . 9
2.3 Automatic Mailing Facility . . . . . . . . 10
2.4 Remote Command Execution Facility . . . . . 10
2.5 Mailing List Server . . . . . . . . . . . . 10
2.6 Supported Environment . . . . . . . . . . . 11
Chapter 3 Message Command Language 12
3.1 The HELP Command . . . . . . . . . . . . . 13
3.2 The DIR Command . . . . . . . . . . . . . . 13
3.3 The NEWFILES Command . . . . . . . . . . . 13
3.4 The GET Command . . . . . . . . . . . . . . 14
3.5 The REPLYTO Command . . . . . . . . . . . . 15
3.6 The PING Command . . . . . . . . . . . . . 15
3.7 The COOKIE Command . . . . . . . . . . . . 15
3.8 The QUIT Command . . . . . . . . . . . . . 15
3.9 The PASSWORD Command . . . . . . . . . . . 16
3.10 The JOIN Command . . . . . . . . . . . . . 16
3.11 The UNJOIN Command . . . . . . . . . . . . 17
3.12 The ARCHIVE Command . . . . . . . . . . . 17
3.13 The MEMBERS Command . . . . . . . . . . . 17
3.14 The ADDMEMBER Command . . . . . . . . . . 18
3.15 The DROPMEMBER Command . . . . . . . . . . 18
3.16 The DIGEST Command . . . . . . . . . . . . 19
3.17 SysOp Defined Commands . . . . . . . . . . 19
Chapter 4 Installing WFS 20
4.1 Planning your Configuration . . . . . . . . 20
4.1.1 Incoming User IDs . . . . . . . . . . 21
4.1.2 Outbound User ID . . . . . . . . . . . 21
4.1.3 Disk Space . . . . . . . . . . . . . . 21
4.2 The MS-DOS Environment . . . . . . . . . . 22
4.3 Installing the Programs . . . . . . . . . . 23
4.3.1 Configuring WFSREQST . . . . . . . . . 23
4.3.2 Configuring WFSSENDF . . . . . . . . . 23
4.3.2.1 Command Line Arguments . . . . . 24
4.3.3 Configuring an Authorization Exit
Program . . . . . . . . . . . . . . . 25
iv
4.4 Updating Waffle's STATIC File . . . . . . . 25
4.5 Other WFS Files . . . . . . . . . . . . . . 26
Chapter 5 Configuring WFS Features 27
5.1 Configuring the Mail Based Archive Server . 27
5.2 Waffle's DIRS file . . . . . . . . . . . . 27
5.2.1 /WFS.DENY . . . . . . . . . . . . . . 27
5.2.2 /WFS.HIDE . . . . . . . . . . . . . . 28
5.2.3 Configuring WFSFILES . . . . . . . . . 28
5.3 Automatic Mailing Facility . . . . . . . . 29
5.4 Remote Command Execution Facility . . . . . 29
5.4.1 The Command Definition File . . . . . 29
5.4.1.1 FileIdent . . . . . . . . . . . . 30
5.4.1.2 Command . . . . . . . . . . . . . 31
5.4.1.3 Password . . . . . . . . . . . . 31
5.4.1.4 UserOperands . . . . . . . . . . 32
5.4.1.5 MailResults . . . . . . . . . . . 32
5.4.1.6 RecordResults . . . . . . . . . . 32
5.5 Mailing Lists . . . . . . . . . . . . . . . 33
5.5.1 About Mailing Lists . . . . . . . . . 33
5.5.1.1 Open Mailing Lists . . . . . . . 33
5.5.1.2 One Way Mailing Lists . . . . . . 33
5.5.1.3 Digest Mailing Lists . . . . . . 34
5.5.2 Configuring Mailing Lists . . . . . . 36
5.5.3 The Mailing List Configuration File . 37
5.5.3.1 FileIdent . . . . . . . . . . . . 37
5.5.3.2 ListName . . . . . . . . . . . . 37
5.5.3.3 Welcome . . . . . . . . . . . . . 37
5.5.3.4 MemberFile . . . . . . . . . . . 38
5.5.3.5 ReplyTo . . . . . . . . . . . . . 38
5.5.3.6 ReplyStyle . . . . . . . . . . . 39
5.5.3.7 MultiAddress . . . . . . . . . . 40
5.5.3.8 MembersOnly . . . . . . . . . . . 40
5.5.3.9 NoEcho . . . . . . . . . . . . . 41
5.5.3.10 AutoDelete . . . . . . . . . . . 41
5.5.3.11 Password . . . . . . . . . . . . 41
5.5.3.12 Digest . . . . . . . . . . . . . 42
5.5.3.13 DigestMinArticles . . . . . . . 42
5.5.3.14 DigestSize . . . . . . . . . . . 43
5.5.3.15 Join . . . . . . . . . . . . . . 43
5.5.3.16 UnJoin . . . . . . . . . . . . . 43
5.5.3.17 Archive . . . . . . . . . . . . 44
5.5.3.18 Members . . . . . . . . . . . . 44
5.5.3.19 AddMember . . . . . . . . . . . 44
5.5.3.20 DropMember . . . . . . . . . . . 44
Chapter 6 Reference 46
6.1 Waffle's Static File . . . . . . . . . . . 46
v
6.1.1 Temporary . . . . . . . . . . . . . . 47
6.1.2 Bin . . . . . . . . . . . . . . . . . 47
6.1.3 Waffle . . . . . . . . . . . . . . . . 47
6.1.4 Node . . . . . . . . . . . . . . . . . 47
6.1.5 Uucpname . . . . . . . . . . . . . . . 47
6.1.6 wfs.sender . . . . . . . . . . . . . . 47
6.1.7 wfs.reply-to . . . . . . . . . . . . . 48
6.1.8 wfs.uuencode . . . . . . . . . . . . . 48
6.1.9 wfs.uuencode.ext . . . . . . . . . . . 48
6.1.10 wfs.ascii.size . . . . . . . . . . . 49
6.1.11 wfs.ascii.lines . . . . . . . . . . . 49
6.1.12 wfs.uuencode.lines . . . . . . . . . 49
6.1.13 wfs.help . . . . . . . . . . . . . . 50
6.1.14 wfs.filelist . . . . . . . . . . . . 50
6.1.15 wfs.transcript . . . . . . . . . . . 50
6.1.16 wfs.notrans . . . . . . . . . . . . . 50
6.1.17 wfs.signature . . . . . . . . . . . . 50
6.1.18 wfs.errorlimit . . . . . . . . . . . 51
6.1.19 wfs.msglimit . . . . . . . . . . . . 51
6.1.20 wfs.daylimit . . . . . . . . . . . . 51
6.1.21 wfs.quelimit . . . . . . . . . . . . 52
6.1.22 wfs.enable.* . . . . . . . . . . . . 52
6.1.23 wfs.authexit . . . . . . . . . . . . 53
6.1.24 wfs.automail . . . . . . . . . . . . 53
6.1.25 wfs.automail.immediate . . . . . . . 54
6.1.26 wfs.command . . . . . . . . . . . . . 54
6.1.27 wfs.maillist . . . . . . . . . . . . 55
Chapter 7 A Few Hints 57
7.1 Extended Logging . . . . . . . . . . . . . 57
7.2 Testing WFS . . . . . . . . . . . . . . . . 57
7.3 Forging a Request . . . . . . . . . . . . . 58
Chapter 8 Messages 60
Appendix A 61
A.1 Technical Support . . . . . . . . . . . . . 61
A.2 Known Problems . . . . . . . . . . . . . . 61
A.3 Future Direction . . . . . . . . . . . . . 61
A.4 Acknowledgments . . . . . . . . . . . . . . 62
vi
b i r d s o n g
WFS User Guide and Reference
What's New in This Release
_________________________________________________________________
Chapter 1
What's New in This Release
Release 3.0 adds some new features to WFS.
WFS Release 3.0 is fully compatible with WFS Release 2.0.
Requests queued via WFSREQST release 2.0 may be processed by
WFSSENDF release 3.0.
o Digest form Mailing Lists are now supported.
o Mailing lists replies can now be directed via SysOp controls
in the MAILLIST.CFG file.
o WFSREQST now parses the 'Recieved:' mail header, if present,
to resolve the target address of an incomming mail message.
o The "-U" command line argument, a heretofore undocumented
feature in WFSREQST, is now documented. The "-U" argument
forces the "To:" header to be the operand of the "-U"
argument. Use this if your upstream sites insist on re-
writing mail headers so that WFSREQST cannot recognize them.
o The 'AddMember' command now causes the Welcome message to be
sent to the newly added member of the mailing list.
o The user command 'ReplyTo' has been added.
o Mail headers for outbound Mailing List messages are more
terse. Tighter conformance to RFC822 has been added.
o Improved error checking and reporting. Storage exhaustion
conditions are detected and reported better.
o WFS no longer insists on finding the 'bin' STATIC file
statement.
o General documentation improvements.
o Alas, a ShareWare price increase.
o New ShareWare payment options for WFS users in non-USA
countries.
_________________________________________________________________
Release 3.0
page -7-
b i r d s o n g
WFS User Guide and Reference
Introduction
_________________________________________________________________
Chapter 2
Introduction
WFS began its life as a simple Mail Based Archive Server. Since
its first public release, WFS has been enhanced with a number of
features. It is a misnomer to call it a "File Server" at this
point, because of the addition of unrelated features, but its
name will endure.
2.1 Overview
WFS is fully integrated with Waffle. WFS gets much of its
configuration data from Waffle's STATIC file just as Waffle does.
WFS also adds its own unique statements to Waffle's STATIC file.
These statements define configuration data, enable features, and
customize the appearance of WFS to the SysOp and to end users.
Waffle permits the routing of mail messages via the ALIASES file.
That is: you can cause mail messages to be forwarded to a
different user, posted to a newsgroup, or processed by a program.
WFS is based on the principle that via the ALIASES file, mail
messages can be processed by WFS when Waffle is processing mail.
The incoming message is routed to the WFSREQST program.
WFSREQST may handle a message in its entirety. That is, it may
read and interpret the message and take some action itself,
possibly sending mail to the originator of the incoming message.
WFS may also interpret the incoming message and write data to a
file for the WFSSENDF program to process at a later time: a Work
Queue.
The WFSSENDF program processes the Work Queue. Each file in the
work queue is processed on a First In First Out (FIFO) basis. The
WFSSENDF program may be run each cycle of Waffle's RUN.BAT file
or at specific times via Waffle's SCHEDULE file.
WFS is configurable so that high volumes of mail addressed to the
server do not saturate the system. The number of bytes
representing a response to a command can be limited on a per
message basis, per day basis, and on work queue size.
_________________________________________________________________
Release 3.0
page -8-
b i r d s o n g
WFS User Guide and Reference
Introduction
_________________________________________________________________
The WFS rate limiting features provide a BBS operator with the
ability to manage a varying traffic rate without constant
intervention.
WFS's MBAS feature restricts access to files using Waffle's DIRS
file. Only directories named in Waffle's DIRS file can be
accessed by a mail request. A directory may be accessable by
interactive users, but not via WFS; similarly, mail users may
have access to directories not accessable to interactive users.
The SysOp may deny access to WFS features. WFS provides a simple
"deny list" method for excluding UserIDs, sites, domains or other
string data expressed in an incomming message's reply address.
More sophisticated exclusion techniques are provided by an
Autorization User Exit program; the SysOp is responsible for
providing the Authorization exit program.
WFS supplements restrictive security with an audit trail. WFS
programs write a log of all activity to the WFSLOG file in the
Waffle ADMIN directory. The SysOp has good foot prints to track
and resolve problems in the WFSLOG.
2.2 Mail Based Archive Server
A mail based archive server permits an email message to act like
an internet FTP. What's that?
From a remote computer, a "requestor" sends email to a UserID
routed to WFSREQST. The message body contains commands
representing requests to transmit a file, via email, to the
requestor.
WFSREQST will queue the request for processing later by WFSSENDF.
Because binary data, such as .EXE, .ZIP, etc. files cannot be
sent directly via email, WFSSENDF invokes the UUENCODE program to
convert binary files to ASCII files that are acceptable to
network mailers. The encoded files are then mailed by WFSSENDF by
invoking Waffle's RMAIL program. ASCII files mail be sent without
uuencoding.
A list of files available for MBAS retrieval is created by the
WFSFILES program. This list is can be retrieved by a command.
_________________________________________________________________
Release 3.0
page -9-
b i r d s o n g
WFS User Guide and Reference
Introduction
_________________________________________________________________
2.3 Automatic Mailing Facility
The AutoMail facility builds upon WFS's MBAS feature. Where the
MBAS requires the email originator to explicitly name, in the
message body, the file he wants sent, the AutoMail facility
determines which file to send based on which UserID the email was
addressed to.
The AutoMail facility may operate in two distinct modes:
Immediate and Deferred. Immediate mode provides for immediate
responses, that is: WFS sends the requested file as soon as it
interprets the incomming message.
In Deferred mode, WFS queues the request for later processing by
the WFSSENDF program.
2.4 Remote Command Execution Facility
The Remote Command Execution Facility permits the SysOp to define
custom commands that may be invoked when the WFSREQST program
interprets that command in the message body.
The command is executed by the WFSREQST program and the results
can be mailed back to the message originator.
This facility is protected by a required password expressed in
the message body: No correct password, no command execution.
2.5 Mailing List Server
The principle of a mailing list is simple enough: Mail addressed
to the mailing list's UserID is forwarded to all members of the
mailing list.
Waffle, alone, provides basic mailing list features by way of its
ALIASES file. The SysOp must manually create and maintain entries
in the ALIASES file for each mailing list maintained on the
system.
WFS's Mailing List feature can be configured to operate in three
modes: Open Mailing List; OneWay Mailing List; Digest Mailing
List.
When a Mailing List is configured as an Open list, the list may
be posted to by anyone, subject to SysOp controls.
_________________________________________________________________
Release 3.0
page -10-
b i r d s o n g
WFS User Guide and Reference
Introduction
_________________________________________________________________
When a Mailing List is configured as a OneWay list, only a list
moderator may post to the mailing list. Replies to postings are
sent to the list's moderator.
When a Mailing List is configured as a Digest list, postings to
the list are saved until the list's moderator, or a 'cron' job,
releases the list. When released, a digest of accumulated
articles is made and the digest is sent to members of the list.
The digest conforms to RFC1153.
2.6 Supported Environment
WFS operates on IBM PCs and compatible clones; it operates where
you already run Waffle. WFS is designed to operate with MS-DOS
3.3 or higher. WFS has been tested with MS-DOS 3.3, 5.0, 6.0. WFS
has been tested with DblSpace.
This release of WFS supports Waffle Release 1.65. This release is
expected to operate with Waffle 1.66, when issued. WFS 3.0 will
not operate with Waffle 1.64 because of the changes to Waffles
Files sub-system introduced in Waffle 1.65.
Waffle and WFS have been successfully run together under Windows
3.0. and 3.1
WFS has been tested on a generic 8 MHz 80286 AT compatible
machine and a generic 33 MHz 80386 AT compatible machine. WFS
users have reported successful execution on everything from 8088
based machines through 80486 machines. WFS is reported to run
under DesqView.
_________________________________________________________________
Release 3.0
page -11-
b i r d s o n g
WFS User Guide and Reference
Message Command Language
_________________________________________________________________
Chapter 3
Message Command Language
WFS implements a number of commands interpreted in an incomming
mail message. Each of these commands is optional; the SysOp may
selectively enable any, all or none of these commands via
statements in the STATIC file. See "wfs.enable.*" on page 52 for
directions to enable commands.
There are some general rules for commands:
o Commands and operands are, in general, not case sensitive;
the operand of the "password" command is case sensitive.
o Leading spaces are permitted before the command. Commands
must be the first token on a line.
o A '#' character as the first character on a line is treated
as a comment. The line does not cause an error.
o Blank lines are ignored.
o A line beginning with the string "--" is treated as end of
input. The remainder of the message is ignored.
The built-in WFS commands are:
HELP
DIR
NEWFILES
GET
REPLYTO
QUIT
PING
COOKIE
PASSWORD
JOIN
UNJOIN
ARCHIVE
MEMBERS
ADDMEMBER
DROPMEMBER
DIGEST
_________________________________________________________________
Release 3.0
page -12-
b i r d s o n g
WFS User Guide and Reference
Message Command Language
_________________________________________________________________
The SysOp may add site specific commands to the WFS built-in
commands via the "Remote Command Execution Facility". See that
topic later in this manual.
3.1 The HELP Command
The HELP command causes WFS to send the file identified via the
"wfs.help" statement in Waffle's STATIC file. The file is
included in the session transcript.
Anything after the HELP on the line is ignored.
The SysOp may selectively enable and optionally assign multiple
aliases for the HELP command using the wfs.enable.help STATIC
file statement.
3.2 The DIR Command
The DIR command causes WFS to send the file identified via the
"wfs.filelist" statement in Waffle's STATIC file. The request for
the directory is queued for later transmission.
Anything after the DIR on the line is ignored.
The SysOp may assign multiple names for the DIR command using the
wfs.enable.dir STATIC file statement.
3.3 The NEWFILES Command
The NEWFILES command causes WFS to send a list of files newer
that the user specified date. The request for NEWFILES is queued
like a the DIR request.
The systax for the NEWFILES command is:
NEWFILES <date>
<date> is required. <date> has the form of mm-dd-yy. WFS is
strict about checking the form of <date>; if it does not look
like it expects, the command will be rejected.
A valid specification for the NEWFILES command is:
NEWFILES 02-15-92
_________________________________________________________________
Release 3.0
page -13-
b i r d s o n g
WFS User Guide and Reference
Message Command Language
_________________________________________________________________
The SysOp may selectively enable and optionally assign multiple
aliases for the NEWFILES command using the wfs.enable.newfiles
STATIC file statement.
3.4 The GET Command
The GET command causes WFS to send a file to the requestor.
The syntax for the GET command is:
GET <filespec> [uue[ncode] | xxe[ncode]]
<filespec> is required. <filespec> must specify a path, but
without a drive specification. The filespec is not relative to
any directory. Unlike interactive waffle, where the user is
placed in the directory defined by Waffle's "files" STATIC file
statement, WFS has no default starting directory.
uuencode or xxencode is optional and may be abreviated as "uue"
or "xxe", respectively. If neither are specified, the file is
sent according to the rules for sending files set by the system
administrator. That is: the system administrator may define a
list of file extensions that will always be uuencoded for
transmission.
If uuencode is specified, the file is sent uuencoded.
If xxencode is specified, the file is sent xxencoded.
For example:
GET /public/wfs300.zip
GET /public/waffle/waf165.zip
are syntactically correct.
GET c:/autoexec.bat
GET e:/wfs/src/wfsreqst.c
are not syntactically correct; both incorrect examples have a
drive specifier.
GET autoexec.bat
GET src/wfsreqst.c
are not correct. Both do not specify the leading slash.
_________________________________________________________________
Release 3.0
page -14-
b i r d s o n g
WFS User Guide and Reference
Message Command Language
_________________________________________________________________
The SysOp may selectively enable and optionally assign multiple
aliases for the GET command using the wfs.enable.get STATIC file
statement.
3.5 The REPLYTO Command
The REPLYTO command causes WFS to override the reply address
found by parsing the "From:" or "Reply-to:" message headers.
The syntax for the REPLYTO command is:
replyto <replyAddress>
The SysOp may selectively enable and optionally assign multiple
aliases for the REPLYTO command using the wfs.enable.replyto
STATIC file statement.
3.6 The PING Command
The PING command causes WFS make a simple reply, via the session
transcript, to the requestor. To test the path to a WFS at a
site, send the PING command.
The SysOp may selectively enable and optionally assign multiple
aliases for the PING command using the wfs.enable.ping STATIC
file statement.
3.7 The COOKIE Command
The COOKIE command causes WFS to write a random cookie from the
Waffle COOKIES file into the session transcript.
The number of cookies per message is limited.
The SysOp may selectively enable and optionally assign multiple
aliases for the COOKIE command using the wfs.enable.cookie STATIC
file statement.
3.8 The QUIT Command
The word "quit" as the first token on a line causes WFS to quit
processing input as if end of input had occurred.
_________________________________________________________________
Release 3.0
page -15-
b i r d s o n g
WFS User Guide and Reference
Message Command Language
_________________________________________________________________
The SysOp may selectively enable and optionally assign multiple
aliases for the QUIT command using the wfs.enable.quit STATIC
file statement.
3.9 The PASSWORD Command
Some commands require the user to specify a password in the
incomming message before invoking the SysOp defined command. The
syntax for the PASSWORD command is:
password <string>
Where string is the password for the SysOp defined command that
will appear in the input stream. The operand of the PASSWORD
command is case sensitive.
The SysOp may selectively enable and optionally assign multiple
aliases for the PASSWORD command using the wfs.enable.password
STATIC file statement.
3.10 The JOIN Command
The JOIN command causes WFS to add the originator of the email to
a mailing list.
The join command is mailed to the command server address.
The syntax for the JOIN command is:
join <listname>
Where <listname> is the name of the mailing list.
To subscribe to the mailing list, he would say:
join test-list
If a subscriber wants to mail to all subscribers, then addresses
mail as:
test-list@FroBaz.com
The syntax of the other mail list commands is similar.
_________________________________________________________________
Release 3.0
page -16-
b i r d s o n g
WFS User Guide and Reference
Message Command Language
_________________________________________________________________
The SysOp may selectively enable and optionally assign multiple
aliases for the JOIN command using the wfs.enable.join STATIC
file statement.
3.11 The UNJOIN Command
The UNJOIN command causes WFS to remove the originator of the
email from a mailing list.
The syntax for the UNJOIN command is:
unjoin <listname>
The SysOp may selectively enable and optionally assign multiple
aliases for the UNJOIN command using the wfs.enable.unjoin STATIC
file statement.
3.12 The ARCHIVE Command
The ARCHIVE command causes WFS to send all archived messages for
the named mailing list to the requestor. The request is queued
for subsequent processing.
The syntax for the ARCHIVE command is:
archive <listname>
The SysOp may selectively enable and optionally assign multiple
aliases for the ARCHIVE command using the wfs.enable.archive
STATIC file statement.
3.13 The MEMBERS Command
The MEMBERS command causes WFS to send a list of all members
(subscribers) to the originator of this message.
members <listname>
The SysOp may selectively enable and optionally assign multiple
aliases for the MEMBERS command using the wfs.enable.members
STATIC file statement.
_________________________________________________________________
Release 3.0
page -17-
b i r d s o n g
WFS User Guide and Reference
Message Command Language
_________________________________________________________________
3.14 The ADDMEMBER Command
The ADDMEMBER command is used to add a member to a mailing list.
Use the ADDMEMBER, as compared with the JOIN command, to add a
member other than the originator of the message to a mailing
list. The syntax of the ADDMEMBER command is:
addmember <listname> <member_address>
The ADDMEMBER command requires that a password be specified
before the ADDMEMBER command; see the PASSWORD command. The
password is checked, case significant, against the password for
the mailing list named in the command. An exact match is required
for the member_address to be added to the member list.
This command is intended for use where the mailing list is
configured with the JOIN command disabled for the list. A mailing
list owner can add a member to his mailing list using this
command. The following example demonstrates a password followed
by an ADDMEMBER:
password TheList'sPassword
addmember test-list frobaz@foo.bar.com
When using this command, the member_address must be specified
exactly as it would appear in the "From:" or "Reply-to:" message
header line. This is significant because some mailers re-write
addresses for reasons known only to the gods and perverse site
administrators.
The ADDMEMBER command causes the Mailing List's 'welcome' file to
be sent to the new member.
The SysOp may selectively enable and optionally assign multiple
aliases for the ADDMEMBER command using the wfs.enable.addmember
STATIC file statement.
3.15 The DROPMEMBER Command
The DROPMEMBER command is used to delete a member from a mailing
list. Use the DROPMEMBER command, as compared with the UNJOIN
command, to remove a member, other than the originator of the
message, from a mailing list. The syntax of the DROPMEMBER
command is:
dropmember <listname> <member_address>
_________________________________________________________________
Release 3.0
page -18-
b i r d s o n g
WFS User Guide and Reference
Message Command Language
_________________________________________________________________
The DROPMEMBER command requires that a password be specified
before the DROPMEMBER command; see the PASSWORD command. The
password is checked, case significant, against the password for
the mailing list named in the command. An exact match is required
for the member_address to be dropped from the member list.
When using this command, the member_address must be specified
exactly as it appears in the member file for the named mailing
list.
The SysOp may selectively enable and optionally assign multiple
aliases for the DROPMEMBER command using the
wfs.enable.dropmember STATIC file statement.
3.16 The DIGEST Command
The DIGEST command is used to release a Digest form Mailing List
for processing.
digest <listname>
The DIGEST command requires that a password be specified before
the DIGEST command; see the PASSWORD command. The password is
checked, case significant, against the password for the mailing
list named in the command. An exact match is required for digest
processing to be performed.
The SysOp may selectively enable and optionally assign multiple
aliases for the DIGEST command using the wfs.enable.digest STATIC
file statement.
3.17 SysOp Defined Commands
The SysOp may define commands unique to this site.
See "Remote Command Execution Facility" on page 29 for a
description of this feature.
_________________________________________________________________
Release 3.0
page -19-
b i r d s o n g
WFS User Guide and Reference
Installing WFS
_________________________________________________________________
Chapter 4
Installing WFS
Installing WFS is not hard, but it does presuppose a certain
level of skill with both MS-DOS, various utility programs, and
with Waffle. You should be experienced using MS-DOS. You should
know how to use PKUNZIP. You should also have experience as a
Waffle System Operator (SysOp). You will need to understand the
principle of Waffle's static file. Experience with making changes
to the static file is highly desirable. See the Waffle
documentation.
There are several steps to installing WFS.
o Planning your configuration.
o The MS-DOS Environment.
o Installing the Programs.
o Updating Waffle's STATIC file.
o Configuring the Mail Based Archive Server.
o Configuring AutoMail
o Configuring the Remote Command Execution Facility
o Configuring Mailing Lists
4.1 Planning your Configuration
The planning issues for WFS are:
o What user ID will receive incoming requests?
o What user ID will mail responses to requests?
o Disk space for Waffle's spool and temporary directories.
_________________________________________________________________
Release 3.0
page -20-
b i r d s o n g
WFS User Guide and Reference
Installing WFS
_________________________________________________________________
4.1.1 Incoming User IDs
WFS may use several different incomming addresses, depending on
which features you select. In all cases, one UserID will be used
as the "server's" address. This UserID will process incomming
commands. Other UserIDs will be used for AutoMail and for Mailing
Lists.
Choose the user ID for WFS's server to reflect its use. For
example:
File-Request
Archive-Server
listserv
server
The ID should be different from the ID that mails responses to
requests.
4.1.2 Outbound User ID
The user ID for outbound requests should be different from the ID
that receives requests (How can I emphasize this enough!). Should
a response to a request bounce, it will be returned to this ID.
You will have to create a directory in Waffle's USER directory
for this ID. WFSREQST writes files representing queued requests
in this directory. WFSSENDF reads the queued requests from this
directory.
The outbound UserID should have an account in Waffle's PASSWORD
file. Here's why: If you run the SYSMAN CLEAN command, the
directory, and the files contained in the directory, belonging to
the outbound UserID will be deleted.
4.1.3 Disk Space
WFS uses disk space in the Waffle USER directory to store queued
requests. The queue files are small, but there may be large
numbers of them, depending on how you set WFS's rate limiting
options. You may have to determine this disk usage requirement by
experiment.
Mailing files may use large amounts of space in the Waffle spool
directory. The drive containing the spool directory should have
enough space to accommodate the 2.5 times the number of bytes
specified in the wfs.daylimit configuration option.
_________________________________________________________________
Release 3.0
page -21-
b i r d s o n g
WFS User Guide and Reference
Installing WFS
_________________________________________________________________
When uuencoding files for mailing, WFS uses the directory
specified in Waffle's "temporary" static file statement. The
drive containing this directory should be 2.5times the size of
the largest file that could be mailed.
4.2 The MS-DOS Environment
The WFS programs expect to find the environment variables
"WAFFLE" and "TZ". The "WAFFLE" environment variable should
reference the same file as the file with which you normally run
WAFFLE.
The TZ environment variable should be set in either of two ways
depending on whether daylight savings time is in effect:
set tz=xxxyzzz
when daylight savings time is in effect.
Or...
set tz=xxxy
when daylight savings time is not in effect.
Where:
xxx Is the Time Zone abbreviation, for example PST
(Pacific Standard Time).
y Is the offset, in hours west, from UTC (aka GMT).
zzz Is the Time Zone abbreviation, for example PDT
(Pacific Daylight Time).
For example, to set the "TZ" environment variable for the US
Pacific time zone, daylight time, set the environment using the
command:
set tz=PST8PDT
The WFS programs use the "TZ" environment variable during startup
processing to display the startup message, containing the date
and time, including the timezone abbreviation. After
internalizing the STATIC file the WFS programs use the value of
"timezone" STATIC file statement when a timezone value is
required.
_________________________________________________________________
Release 3.0
page -22-
b i r d s o n g
WFS User Guide and Reference
Installing WFS
_________________________________________________________________
If the WFS programs do not find the "TZ" environment variable
during startup processing, the programs use "GMT" as a default
Time Zone abbreviation in the startup message.
4.3 Installing the Programs
Copy the WFS*.EXE files into a directory reachable by the MS-DOS
PATH environment variable while Waffle is running. The WAFFLE/BIN
directory is suggested.
UnZip the file UUEXE521.ZIP. Copy the executable files into the
WAFFLE/BIN directory.
4.3.1 Configuring WFSREQST
Edit Waffle's SYSTEM/ALIASES file. For the user ID you want to
receive mail on behalf of WFS, make an entry that redirects mail
for that ID into the program wfsreqst.exe. For example:
file-request | f:/waffle/bin/wfsreqst
The user ID for the request program need not have a directory in
the WAFFLE/USER directory.
WFSREQST accepts one command line argument: The syntax for the
command line arguments is:
-U<address> Force "To:" mail header to <address>
Where <address> is the address of an AutoMail or
Mailing List.
Use this option when an upstream site insists on re-
writing "To:" mail headers to the point where
WFSREQST cannot determine the address. This argument
is not required where mail is directed at WFSREQST's
command processing.
4.3.2 Configuring WFSSENDF
Program WFSSENDF operates on queued requests to mail files to
requestors. WFSSENDF may be run from the Waffle RUN.BAT batch
file or it may be run from the Waffle SCHEDULE file.
If you choose to run it from the RUN.BAT batch file, you may want
to place it after execution of the UUXQT program. This will cause
newly processed requests to be responded to immediately.
_________________________________________________________________
Release 3.0
page -23-
b i r d s o n g
WFS User Guide and Reference
Installing WFS
_________________________________________________________________
If you choose to run it from the SCHEDULE file, you may want to
schedule it at a time of infrequent interactive use and at a time
when passing mail to other sites is cheapest. You may also want
to schedule it just before polling another site.
The user ID that will be the mailer needs a directory in the
WAFFLE/USER directory. You must create this directory; WFS will
not do it for you. For example, at Birdsong, the user ID that
mails files to requestors is called FILESERV. WFS will create and
delete files in this directory.
4.3.2.1 Command Line Arguments
By default, WFSSENDF processes all work queue items in the work
queue each time it is run.
If you run WFSSENDF from the SCHEDULE file you may want to
process only certain types of work queue items depending on the
time of day. For example you may run WFSSENDF several times per
day, but during the daytime you do not want to process work queue
items for file requests to minimize telephone costs. Each work
queue type may be suppressed using a command line argument.
The syntax for these command line arguments is:
-A Suppress AutoMail processing
-F Suppress Files processing.
-D Suppress Directory processing.
-N Suppress NewFiles processing.
-M Suppress Mailing List processing.
-R Suppress Mailing List Archive processing.
-T Suppress Mailing List Digest processing.
For example, to prevent WFSSENDF from processing work queue items
for Files, Directories, and NewFiles:
WFSSENDF -F -D -N
_________________________________________________________________
Release 3.0
page -24-
b i r d s o n g
WFS User Guide and Reference
Installing WFS
_________________________________________________________________
4.3.3 Configuring an Authorization Exit Program
An optional authorization exit program may be used to further
enhance the security of WFS. The System Operator is responsible
for providing the authorization exit program.
The authorization exit is invoked after WFSREQST interprets the
message header in the incomming request. The program is invoked
with one "command line argument": the interpreted email address
of the requestor
The authroization exit will see "argv[0]" as the fully qualified
pathname of the authorization exit program; "argv[1]" is the
email address of the requestor; "argv[2]" is NULL. (This babble
should be meaningful to C language programmers).
The authorization exit program should return a zero (0) value to
tell WFSREQST to continue processing the request. A return value
of one (1) tells WFSREQST to reject the message. Other return
values are not defined and will cause WFSREQST to terminate
abnormally.
When a command is rejected by the authorization exit, WFSREQST
writes a message to the WFSLOG file.
To enable use of the authorization exit, use the "wfs.authexit"
static file statement. WFS.AUTHEXIT should point to the fully
qualified pathname of the authorization exit program.
A sample source file, WFSAUTH.C, is provided for those users who
want to custom tailor the user authorization feature of WFS. The
authorization exit is not required to use WFS, but is provided
for users who want the additional control.
Compile the sample authorization exit using Microsoft C. You may
use any language, any compiler that accepts command line
arguments and that supports "return values" to write your own
authorization exit.
4.4 Updating Waffle's STATIC File
See "Waffle's Static File" on page 46. This section describes all
the STATIC file variables used by WFS. A sample STATIC file,
"STATIC.SMP" is provided. you may customize this file to suit
your requirements.
Merge this file with your Waffle STATIC file.
_________________________________________________________________
Release 3.0
page -25-
b i r d s o n g
WFS User Guide and Reference
Installing WFS
_________________________________________________________________
4.5 Other WFS Files
Sample message files, used by WFS, are provided for your
customization.
Install these files by copying them to the directory you have
selected for the user ID of the mailer. You may place these files
elsewhere, if you like; WFS's STATIC file statements determine
the path and filenames for these files.
o WELCOME.TXT. WFS pre-pends this file to the session
transcript. You will want to modify this file for your site.
o SIGNATUR.TXT. WFS appends this file to the session
transcript. You will want to modify this file for your site.
You almost certainly will not like the contents of the the
default file.
o HELP.TXT WFS mails this file in response the HELP command.
You will want to modify this file for your site.
Additional files are provided as examples. These files are fully
annotated to aid you in configuring your system to your needs.
The sample files are co-ordinated, that is: they all work
together. For instance, if an entry is required in the STATIC
file and has a companion entry in the ALIASES file, then the
companion entry in the ALIASES file is provided.
o STATIC.SMP. This is a sample STATIC file.
o ALIASES.SMP This is a sample ALIASES file.
o MLOPEN.SMP This is a sample Mailing List configuration file
for an "Open" mailing list.
o MLDIGEST.SMP This is a sample Mailing List configuration file
for a "Digest" mailing list.
o MLONEWAY.SMP This is a sample Mailing List configuration file
for a "One Way" mailing list.
o WHATTIME.CDF. This is a sample Command Definition File.
_________________________________________________________________
Release 3.0
page -26-
b i r d s o n g
WFS User Guide and Reference
Configuring WFS Features
_________________________________________________________________
Chapter 5
Configuring WFS Features
5.1 Configuring the Mail Based Archive Server
The Mail Based Archive Server (MBAS) is WFS's original feature.
Configuring the MBAS requires a few steps.
o Configure STATIC file statements that control WFS's
operation. See the "Waffle's Static File" on page 46.
o Configuring your SCHEDULE file or RUN.BAT to run the WFSFILES
program; the WFSFILES program provides users with a list of
files available via the MBAS feature.
5.2 Waffle's DIRS file
WFS uses Waffle's DIRS file to identify directories accessable to
requestors. WFS uses the "filearea", "/dir=", "/info=" fields
from each DIRS file entry.
WFS also uses the tokens "/wfs.deny" and "/wfs.hide" to control
access and visibility to directories named in the DIRS file
5.2.1 /WFS.DENY
By default, all directories identified by a DIRS file statement
are accessable to WFS. When WFS finds a DIRS file statement with
the "/wfs.deny" token, then access to that directory via WFS is
denied. In the following example:
public /dir="f:/public" /access=1
waffle /dir="f:/public/waffle" /access=1
special /dir="f:/special" /access=9 /wfs.deny
directories identified by the "public" and "waffle" statements
are accessable to WFS; the directory identified by the "special"
statement cannot be accessed by WFS.
_________________________________________________________________
Release 3.0
page -27-
b i r d s o n g
WFS User Guide and Reference
Configuring WFS Features
_________________________________________________________________
DIRS file statements having the "/wfs.deny" parameter are not
listed by the WFSFILES program.
5.2.2 /WFS.HIDE
The "/wfs.hide" token identifies the directory as "invisible" to
the WFSFILES program. The directory and files in the directory
are accessable to WFS, but the directory and its contents are not
shown in program WFSFILES output. Consider this example:
public /dir="f:/public" /access=1
waffle /dir="f:/public/waffle" /access=1
special /dir="f:/special" /access=9 /wfs.hide
The directory, "special", is now accessable via WFS. The WFSFILES
program does not show the directory in its output. Only users who
know of the directory's existence and the contents of the
directory may request files from this directory.
5.2.3 Configuring WFSFILES
The WFSFILES program reads Waffle's DIRS file. For each entry in
the DIRS file not having either of "/wfs.deny" or "/wfs.hide"
token, WFSFILES lists files in this directory to stdout. Stdout
may be re-directed to a file. For example:
WFSFILES >f:\user\fileserv\filelist.txt
You may want to run WFSFILES via the Waffle SCHEDULE file.
WFSFILES accepts command line arguments.
WFSFILES [-a] [-b] [-s]
Where:
-a Suppress the "File Area:" line on output.
-b If a "@banner" file exists in the directory named by
the /dirs= statement, print the file to stdout.
-s Suppress the "splash" (program ID, date, time, etc.)
from the stdout output.
_________________________________________________________________
Release 3.0
page -28-
b i r d s o n g
WFS User Guide and Reference
Configuring WFS Features
_________________________________________________________________
5.3 Automatic Mailing Facility
The AutoMail facility is the easiest feature of WFS to configure.
Instructions for configuring the AutoMail facility are described
in the Chapter titled "Waffle's Static File". See "wfs.automail
on page 53 and in "wfs.automail.immediate on page 54
Other STATIC file statements related to uuencode apply to the
AutoMail facility.
5.4 Remote Command Execution Facility
A few steps are required to create your own commands.
o Place a "wfs.command" statement in Waffle's STATIC file.
Instructions for coding the "wfs.command" statement are in
"wfs.command" on page 54.
o Create a "Command Definition File" in the USER directory
named by the "wfs.sender" STATIC file statement.
The function of the Command Definition File and its syntax is
described in the next section.
o Create a HELP topic in the "help" file, if you intend to make
the command available to other users.
5.4.1 The Command Definition File
The Remote Command Execution Facility, may be enabled by a
statement in Waffle's STATIC file; a wfs.command statement is
used to define a command that may be invoked via an incomming
message.
The CDF file has the file extension ".CDF"; all active .CDF files
are stored in the user directory named by the wfs.sender STATIC
file statement.
The .CDF file has the same general syntax as Waffle's STATIC
file:
variablename : operand(s)
_________________________________________________________________
Release 3.0
page -29-
b i r d s o n g
WFS User Guide and Reference
Configuring WFS Features
_________________________________________________________________
A keyword beginning in column one, followed by optional
whitespace, followed by the colon character (':'), followed by
optional whitespace, followed by one or more operands.
Blank lines are ignored. Lines beginning with '#' or ';' are
ignored.
CDF files have the following statements:
o FileIdent
o Command
o Password
o UserOperands
o MailResults
o RecordResults
The statement identifiers are all case insensitive: you may code
them in upper, lower or mixed case. Except where noted, the
operands of these commands are also case insensitive.
Where a statement is defined to take a "boolean" operator, any of
"yes", "true", "1" may be used to define the boolean equivalent.
Any of "no", "false", "0" may be used to define the boolean
equivalent.
A sample .CDF file (UDATE.CDF) is included in the distribution of
WFS. A program, WFSUDATE (executable and source in C), are also
included in the distribution. These samples can show the effects
of the Command Execution Facility. The WFSUDATE program is not
particularly meaningful; it just demonstrates the facility.
5.4.1.1 FileIdent
The FileIdent statement is required. It's operand is the fixed
value "WFS2Command". The FileIdent statement is used by WFSREQST
to help identify the file as a WFS CDF file.
Specify this statement exactly as shown:
FileIdent : WFS2Command
_________________________________________________________________
Release 3.0
page -30-
b i r d s o n g
WFS User Guide and Reference
Configuring WFS Features
_________________________________________________________________
5.4.1.2 Command
The command statement identifies the command to be executed via
the "system()" library call when this .CDF file is invoked.
Specify this exactly as you would a command line command. For
example, if you wanted to run the MS-DOS "DIR" command code the
command statement as:
Command : dir
You may specify command arguments or input redirection on the
command statement. DO NOT specify I/O redirection for stdout! CDF
uses stdout redirection to capture program output when
MailResults or RecordResults are TRUE.
For example, you could code a complex command statment as:
Command : doittoit -fgQRS -o thing <afile
... But why?
5.4.1.3 Password
All commands defined by a .CDF file are protected via password.
Each command has a separate password (there is a separate .CDF
file for each command). For the user to be able to invoke a
command defined via a .CDF file, he must specify in his message a
password before the attempting to invoke a command. For example
the incomming message should look like:
...
password fooBarGorp
do_what_i_mean_now
...
The password specified by the user is compared to the password
specified in the .CDF file for the "do_what_i_mean_now" command.
This comparison is CASE SENSITIVE!
If the comparison is not equal, the command is not executed.
Note: Take care in selecting passwords. Make them long and
obscure, especially for commands you define that update or delete
files. Change passwords often. Don't come hollering at me if your
system is compromised. I just provided the facility, you do not
have to use it!
_________________________________________________________________
Release 3.0
page -31-
b i r d s o n g
WFS User Guide and Reference
Configuring WFS Features
_________________________________________________________________
Note: should you define your own commands, make sure your users
have appropriate HELP facilities to remind them to specify
passwords before invoking the commands.
5.4.1.4 UserOperands
The UserOperands statement takes a boolean operator. Its default
is NO.
When the UserOperands value is FALSE, the command defined by the
command statement is executed exactly "as is". Any operands
specified by the user are stripped. For example, if the user
said:
...
do_what_i_mean_now dog gone you, I said right now!
then the nothing beyond the "do_what_i_mean_now" is appended to
"command" when it is invoked.
If the UserOperands value is TRUE, then the operands are appended
to the "command". Using the example where the
"do_what_i_mean_now" user command is associated with the "DIR"
command via the command statement, then the command line would
be:
...
dir dog gone you, I said right now!
Commands longer than 127 characters are not executed.
5.4.1.5 MailResults
The MailResults statement takes a boolean operator. Its default
is NO.
When the MailResults value is FALSE, the "stdout" generated by
the command is not included in the message transcript.
When the MailResults value is TRUE, the "stdout" generated by the
command is included in the message transcript.
5.4.1.6 RecordResults
The RecordResults statement takes a boolean operator. Its default
is NO.
_________________________________________________________________
Release 3.0
page -32-
b i r d s o n g
WFS User Guide and Reference
Configuring WFS Features
_________________________________________________________________
When the RecordResults value is FALSE, the "stdout" generated by
the command is not written to the WFSLOG file.
When the RecordResults value is TRUE, the "stdout" generated by
the command is written to the WFSLOG file.
Take care when using this. You can quickly fill up a hard disk
with command output. On the other hand, you may need it.
TAANSTAFL.
5.5 Mailing Lists
5.5.1 About Mailing Lists
WFS supports three (3) different types of mailing lists.
o Open
o One Way
o Digest
Each type of mailing list serves a different purpose.
5.5.1.1 Open Mailing Lists
An "Open" mailing list permits anyone to post to the list (see
the MembersOnly statement in "The Mailing List Configuration
File" for limitations).
Members may send mail to the mailing list's address. The mail is
recieved by WFS, then forwarded to all members of the mailing
list.
5.5.1.2 One Way Mailing Lists
A "One Way" mailing list can be thought of as a Moderated mailing
list. That is: Only the list's moderator can post to the list.
WFS implements One Way mailing lists via "Security by Obscurity".
The posting address for the mailing list is intentionally hidden
from regular mailing list members.
The 'ReplyTo' statement in the mailing list configuration file
obscures the posting address.
_________________________________________________________________
Release 3.0
page -33-
b i r d s o n g
WFS User Guide and Reference
Configuring WFS Features
_________________________________________________________________
5.5.1.3 Digest Mailing Lists
A "Digest" mailing list is the combination of a number of
individual posts to a mailing list. A Digest has a specific
format, as described in RFC1153; WFS's Digests conform to
RFC1153. A copy of RFC1153 is included with the WFS .ZIP file.
A digest mailing list requires a bit more administration than do
the other types of mailing lists. If you plan to set up a digest
mailing list, please read this topic carefully. This topic
describes the workings of a digest mailing list.
Mail addressed to a digest mailing list is accumulated in the
USER directory associated with that mailing list. The individual
articles are not queued for forwarding to the list's members.
When the list is "Digested", the articles are combined into a
single file, the digest file, in the RFC1153 format; the digest
file is mailed to the list's members. When the digest file is
mailed to the list's members, the individual articles are
deleted.
To cause the digest to be created and mailed to the list's
members a "DIGEST" command must be sent to the WFSREQST program.
The DIGEST command requires a password preceeding it in the
command stream.
To cause the DIGEST command to be sent to WFSREQST, construct a
.BAT file similar to the example below. You may run the .BAT file
either from RUN.BAT or via the SCHEDULE file.
_________________________________________________________________
Release 3.0
page -34-
b i r d s o n g
WFS User Guide and Reference
Configuring WFS Features
_________________________________________________________________
@echo on
:
: Send the digest command for the "dig-list" digest
:
: ---------------------
:
: Construct DIGEST command message in a temporary file
:
echo To: server
echo From: system >>$$tmp
echo Subject: Digest Release >>$$tmp
echo.>>$$tmp
:
echo password ThePassword>>$$tmp
echo digest dig-list>>$$tmp
echo quit>>$$tmp
: ---------------------
:
: Send the just created message to WFSREQST
:
w:\bin\wfsreqst <$$tmp
: ---------------------
:
: Delete the temporary file.
:
del $$tmp
Digest files have filenames of the form: "VxxxNyyy", where 'xxx'
is the digest's "Volume Number" and 'yyy' is the digest's "Issue
Number". WFS uses existing digest files to determine what the
filename for the next digest file will be.
The volume number portion will be the same volume number as the
highest volume number as that of any existing digest file. The
issue number will be one greater than the highest issue number of
any existing digest file.
For example: if files V001N001 thru V001N033 exist in the
digest's USER directory, then the next digest file will have
filename V001N034.
To increment the digest's volume number, create a file in the
digest's USER directory named V002N000. The next digest file
created will be V002N001, thus beginning a new digest "Volume".
You, the SysOp or list manager, may determine when it is
appropriate to increment the digest's volume number. See RFC1153
for hints.
_________________________________________________________________
Release 3.0
page -35-
b i r d s o n g
WFS User Guide and Reference
Configuring WFS Features
_________________________________________________________________
A word of caution! Consider what happens when digest files
V001N033 and V002N000 both exist in the digest's user directory:
The next digest filename will be V002N034! I doubt that this is
what you had in mind. Therefore, when you increment the volume
number of a digest, remove or rename all digest files for the
previous volume!
If there's suffecient interest in digest mailing lists, I'll
consider making volume/issue incrementing feature work as
intuition would suggest it should in the next release. If you are
interested, write me.
5.5.2 Configuring Mailing Lists
Configuring the Mailing List Server requires a few steps.
1. A directory in Waffle's USER directory tree is required for
each mailing list. You will also create a regular Waffle
UserID, using Waffle's ADMIN command, for each mailing list;
this aids a mailing list administrator in managing the
mailing list's files.
2. Waffle's STATIC file requires a "wfs.maillist" statement for
each mailing list. See "wfs.maillist" on page 55.
You may configure multiple mailing lists. Each mailing list
requires a "wfs.maillist" statement in the STATIC file.
3. Add an entry in Waffle's ALIASES file for each mailing list.
This is also described in "wfs.maillist". See the ALIASES.SMP
file.
The alias assigned to the mailing list should be different
from the UserID associated with the mailing list. This
prevents a bounced message from being propogated to all
members of the mailing list should one of the mailing list's
members become unreachable.
4. Create the MAILLIST.CFG file for each mailing list in the
USER directory for that mailing list. The format of the
MAILLIST.CFG file is described in "The Mailing List
Configuration File".
Sample files: MLOPEN.SMP, MLONEWAY.SMP, and MLDIGEST.SMP are
sample mail list configuration files demonstrating the
different types of mailing list configurations.
_________________________________________________________________
Release 3.0
page -36-
b i r d s o n g
WFS User Guide and Reference
Configuring WFS Features
_________________________________________________________________
5.5.3 The Mailing List Configuration File
The MAILLIST.CFG file has the same syntax as Waffle's STATIC
file: a keyword, optional whitespace, a colon (':') character,
optional whitespace, and one or more operands. For example:
keyword : operand
The following keywords are defined for a MAILLIST.CFG file. Note
that some combinations of configuration controls make no sense,
e.g. "Archive" and "Digest". WFS does not meticulously test for
combinations of configuration controls that do not work [or work
well] together. Use your good judgement configuring your mailing
lists. I have not tested all possible combinations; there are
just too many possible combinations for a "one person development
shop" to test.
5.5.3.1 FileIdent
Code the "FileIdent" statement exactly as shown:
FileIdent : MailList2
WFS uses this statement to verify that it has the correct file.
5.5.3.2 ListName
ListName is a string; a short description of the mailing list.
For example:
ListName : A Test Mailing List as a Demonstration
5.5.3.3 Welcome
Welcome names a file, within the same directory, that will be
mailed to all new members for this list. For example:
Welcome : welcome.msg
The welcome file is optional, but suggested.
Use the file defined in the "Welcome" statement to describe
List's purpose and charter. Also, include instructions for
unsubscribing to the list.
_________________________________________________________________
Release 3.0
page -37-
b i r d s o n g
WFS User Guide and Reference
Configuring WFS Features
_________________________________________________________________
5.5.3.4 MemberFile
MemberFile names a file, within the same directory, that contains
the membership list. For example:
MemberFile : members.mbr
The JOIN and UNJOIN user commands manipulate this file. The
MEMBERS user command causes WFS to mail this file to the
requestor.
The format of the MemberFile is simple:
o An email address per line.
o Each address begins in column one.
o No extraneous text on the line.
o Lines beginning with the hash character ('#') are not
processed.
o Blank lines are ignored.
Note that the UNJOIN command replaces the first character of an
entry with a hash character.
The JOIN command appends new members to the end of the
MemberFile. After a while, you may have to manually edit this
file to remove former members: i.e. those entries having the hash
character at the beginning of the statement.
You do not have to create this file. WFS will create it the first
time it processes a JOIN or ADDMEMBER command.
5.5.3.5 ReplyTo
The ReplyTo statement is optional in the mailing list
configuration file. The operand of the ReplyTo statement is a
string. The operand specifies the email address for the "Reply-
To:" mail header when the server forwards mail to the mailing
list's members. For example:
ReplyTo : SomeUserID@Some.Site
If ReplyTo is not specified, the generated Reply-To: header has
the form:
_________________________________________________________________
Release 3.0
page -38-
b i r d s o n g
WFS User Guide and Reference
Configuring WFS Features
_________________________________________________________________
Reply-To: Mailing-List-Name@Node
Where 'Mailing-List-Name' is the mail address of the mailing
list; 'Node' is the operand of the "Node" statement in Waffle's
STATIC file.
Use the ReplyTo statement to create a "OneWay" mailing list, or
to otherwise direct replies to mail sent by the mailing list.
Note: The "Reply-To:" address, whether specified or generated is
also the address WFS uses in the "To:" header. Messages are sent
to the list's members, the "To:" header is the "Reply-To:"
address. Why? Unix mailers provide two flavors of a REPLY
command: an 'r' (that's lower case 'r') reply command causes the
reply to go to the address named on the "From:" mail header, or
the "Reply-To:" header if no "From:" header exists. An 'R'
(that's upper case 'R') reply command causes the reply to go to
all addresses found on both the "To:" and the "From:" (or
"Reply-To:") header. Waffle treats all replies, case insensitive,
the same: replies go to either the address specified on the
'From:' header statement or the 'Reply-To:' header statement, if
no 'From:' exists.
So why's this improtant? See the topic "ReplyStyle"; it follows.
5.5.3.6 ReplyStyle
The ReplyTo statement is optional in the mailing list
configuration file. The ReplyStyle statement modifies the
behavior of the ReplyTo statement. The operand of the ReplyStyle
statement is a word. Specify the ReplyStyle as:
ReplyStyle : [replyto | originator]
If ReplyStyle is not specified, the default value is 'replyto'.
When ReplyStyle is 'replyto' Reply-To: mail headers are generated
as described in ReplyTo. See above.
When ReplyStyle is 'originator', no Reply-To: statement is
generated when the mail is sent to the list's members. The From:
mail header contains the operand of the originator's From: or
Reply-To: header.
Use 'ReplyStyle:replyto' without specifying a 'ReplyTo'
MAILLIST.CFG statement to cause *ALL* replies to mailing list
messages to cause replies to go to the mailing list. Some mailing
_________________________________________________________________
Release 3.0
page -39-
b i r d s o n g
WFS User Guide and Reference
Configuring WFS Features
_________________________________________________________________
list managers prefer the higher volume of traffic generated by
this style.
Use 'ReplyStyle:replyto' with a 'ReplyTo' MAILLIST.CFG statement
to cause replies to mailing list messages to go to a specific
email address. This technique is used for OneWay mailing lists.
Use 'ReplyStyle:originator' to cause replies, small 'r' by Unix
mailers, to go to the originator of the mail and replies, large
'R' by Unix mailers, to go to the mailing list and the
originator. This technique closely approximates the way many unix
mailing lists look. Wafflers may not like the style because they
cannot reply to mail from the mailing list and have the reply go
to the mailing list.
5.5.3.7 MultiAddress
MultiAddress causes WFSSENDF to invoke the RMAIL program with
multiple addressees on the command line. This minimizes the
number of spool files created, hence reduces the number of files
sent to the smarthost.
The operand of the MultiAddress statment is a boolean name. Any
of "Yes", "True", "1" may be used for enable this feature, You
may code any of "No", "False", "0" to disable this feature. It's
case insensitive. When it is not specified, it defaults to
"False". For example, to enable the feature:
MultiAddress : yes
Some mailers have problems with mail prepared this way. See the
RMAIL.DOC in the Waffle documentation. WFS respects the rr.len
STATIC file statement, if present, otherwise WFS uses the defined
default of 100.
If you have trouble using MultiAddress, disable it.
5.5.3.8 MembersOnly
MembersOnly causes WFSREQST to check the membership file before
adding the message to the message archive and causing it to be
sent to all of the mailing list's members.
If not specified, the default is "No"; anyone, member or not may
post to the list.
Specify MembersOnly as a boolean term. For example:
_________________________________________________________________
Release 3.0
page -40-
b i r d s o n g
WFS User Guide and Reference
Configuring WFS Features
_________________________________________________________________
MembersOnly : yes
5.5.3.9 NoEcho
NoEcho determines whether a message will be sent to the
originator of the message. When TRUE, messages sent to the
mailing list will not be echoed to the originator of the message.
If not specified, the default is "No"; the post will be sent to
the originator of the message.
Specify NoEcho as a boolean term. For example:
NoEcho : True
5.5.3.10 AutoDelete
AutoDelete causes WFSSENDF to delete the current minus one
Article in the mailing list after mailing the current article to
mailing list members. This feature keeps the archive of articles
at exactly one article. The feature is provided for SysOps or
mailing list owners who do not want expire articles using other
techniques.
If not specified, the default is "No"; Articles will not be
automatically deleted from the Archive.
Specify AutoDelete as a boolean term. For example:
AutoDelete : True
Be careful if you use this feature not to manually mess with the
work queue: do not add, delete or modify work queue files without
understanding the implications of the AutoDelete feature. The
results may be unpredictable.
5.5.3.11 Password
Password assigns a password for the mailing list. The password is
required for the ADDMEMBER and DROPMEMBER user commands. Specify
Password as a string. For example:
Password : ThePassword
Note: password comparisons are case sensitive.
_________________________________________________________________
Release 3.0
page -41-
b i r d s o n g
WFS User Guide and Reference
Configuring WFS Features
_________________________________________________________________
5.5.3.12 Digest
Digest defines this mailing list as a Digest form mailing list.
Specify the operand of Digest as a boolean term. For example:
Digest : yes
The default setting for Digest is "FALSE".
When Digest is true, articles mailed to the mailing list are not
individually forwarded to members of the mailing list. The
article is saved in the mailing list's USER directory until a
DIGEST command is processed by WFSREQST; when WFSSENDF processes
the queued DIGEST command, accumulated articles will be Digested
and mailed to members of the mailing list.
After the digest is made and mailed, the individual articles are
deleted.
The DIGEST command requires a valid password in the command
stream preceeding the DIGEST command.
5.5.3.13 DigestMinArticles
DigestMinArticles is used for Digest mailing lists only; when
specified, it determines the minimum number of articles that must
be present for a Digest of articles to be constructed and mailed.
Specify the operand of DigestMinArticles as an unsigned integer.
For example:
DigestMinArticles : 2
The default setting for DigestMinArticles is 2.
For an example, consider the following circumstance: Suppose you
have set DigestMinArticles to 4. Suppose there are 3 articles
waiting to be Digested and sent. Suppose your cron job submits
the "DIGEST" command.
WFSSENDF will see that there are only 3 articles to be Digested
and will NOT perform the digest operation.
Now suppose there were 6 articles waiting to be Digested and
sent. Suppose your cron job submits the "DIGEST" command.
_________________________________________________________________
Release 3.0
page -42-
b i r d s o n g
WFS User Guide and Reference
Configuring WFS Features
_________________________________________________________________
WFSSENDF will digest all waiting articles and mail the digest to
the list's members.
5.5.3.14 DigestSize
DigestSize specifies the maximum size of a digest mailing, in
bytes.
Specify the operand of DigestSize as an unsigned integer. For
example:
DigestSize : 25000
The default setting for DigestSize is 20000.
Complete articles are Digested until the accumulated digest
exceeds DigestSize bytes. The then assembled digest is then
mailed to members and an new issue of the digest is begun.
Note that the actual size of the mailed digest can exceed
DigestSize. The Digest will contain whole articles; articles will
not be split across digests.
5.5.3.15 Join
Join enables or disables the Join user command for this mailing
list. By default, the Join command is enabled if the STATIC file
statement "wfs.enable.join" has been specified.
Specify the Join statement as a boolean term. For example, to
disable the Join command for this mailing list, specify the Join
statement as:
Join : No
5.5.3.16 UnJoin
UnJoin enables or disables the UnJoin user command for this
mailing list. By default, the UnJoin command is enabled if the
STATIC file statement "wfs.enable.unjoin" has been specified.
Specify the UnJoin statement as a boolean term. For example, to
disable the UnJoin command for this mailing list, specify the
UnJoin statement as:
UnJoin : No
_________________________________________________________________
Release 3.0
page -43-
b i r d s o n g
WFS User Guide and Reference
Configuring WFS Features
_________________________________________________________________
5.5.3.17 Archive
Archive enables or disables the Archive user command for this
mailing list. By default, the Archive command is enabled if the
STATIC file statement "wfs.enable.archive" has been specified.
Specify the Archive statement as a boolean term. For example, to
disable the Archive command for this mailing list, specify the
Archive statement as:
Archive : No
5.5.3.18 Members
Members enables or disables the Members user command for this
mailing list. By default, the Members command is enabled if the
STATIC file statement "wfs.enable.members" has been specified.
Specify the Members statement as a boolean term. For example, to
disable the Members command for this mailing list, specify the
Members statement as:
Members : No
5.5.3.19 AddMember
AddMember enables or disables the ADDMEMBER command for this
mailing list. By default, the ADDMEMBER command is enabled if the
STATIC file statement "wfs.enable.addmember" has been specified.
Specify the AddMember statement as a boolean term. For example,
to disable the ADDMEMBER command for this mailing list, specify
the AddMember statement as:
AddMember : No
5.5.3.20 DropMember
DropMember enables or disables the DROPMEMBER command for this
mailing list. By default, the DROPMEMBER command is enabled if
the STATIC file statement "wfs.enable.dropmember" has been
specified.
_________________________________________________________________
Release 3.0
page -44-
b i r d s o n g
WFS User Guide and Reference
Configuring WFS Features
_________________________________________________________________
Specify the DropMember statement as a boolean term. For example
to disable the DROPMEMBER command for this mailing list, specify
the DropMember statement as:
DropMember : No
_________________________________________________________________
Release 3.0
page -45-
b i r d s o n g
WFS User Guide and Reference
Reference
_________________________________________________________________
Chapter 6
Reference
6.1 Waffle's Static File
WFS depends on statements declared in the Waffle STATIC file.
These are Waffle's. Normally you will have no need to change the
settings of these statements.
WFS also requires his own statements in the STATIC file. WFS's
STATIC file statements conform to the same general syntactic
rules as the Waffle statements. You will configure the following
WFS STATIC file statements:
wfs.sender
wfs.reply-to
wfs.uuencode
wfs.uuencode.ext
wfs.uuencode.lines
wfs.ascii.size
wfs.ascii.lines
wfs.help
wfs.filelist
wfs.transcript
wfs.notrans
wfs.signature
wfs.errorlimit
wfs.msglimit
wfs.daylimit
wfs.quelimit
wfs.enable.*
wfs.deny
wfs.authexit
wfs.automail
wfs.automail.immediate
wfs.command
wfs.maillist
The file "STATIC.smp", contains sample specifications for all the
WFS STATIC file statements. Use this file as a base for
customizing WFS at your site. Append the file into your normal
waffle STATIC file, then modify the statements to suit your site.
_________________________________________________________________
Release 3.0
page -46-
b i r d s o n g
WFS User Guide and Reference
Reference
_________________________________________________________________
6.1.1 Temporary
WFS uses the directory named by the Waffle temporary statement as
a place to construct the session transcript when he processes a
user request. This file is usually small; WFS deletes it after he
mails it to the requestor.
WFS uses the temporary directory as a workarea to uuencode files
that are to be mailed uuencoded. The drive containing this
directory must have enough space to contain all the parts of the
uuencoded file. The file to be uuencoded is not copied to this
directory before it is uuencoded. WFS deletes the uuencode parts
after mailing them to the requestor.
6.1.2 Bin
WFS invokes RMAIL.EXE using the "bin" STATIC statement as the
pathname to the executable.
6.1.3 Waffle
WFS uses the "Waffle" STATIC file statement to locate the ADMIN
directory. WFS places the WFSLOG file in the ADMIN directory.
WFSLOG contains a log of all incoming and outgoing requests,
information and error messages.
WFS uses the "Waffle" STATIC file statement to locate the DIRS
file.
6.1.4 Node
WFS uses the "node" STATIC file statement to construct the mail
header for both the session transcript and the mailed files.
6.1.5 Uucpname
WFS uses the "uucpname" STATIC file statement to construct the
mail header for both the session transcript and the mailed files.
6.1.6 wfs.sender
WFS uses the wfs.sender STATIC file statement to identify the
user ID that responds to mailed requests. It is important to
specify a different user ID from the user ID specified in the
aliases file as the receiver of mailed requests. The different
specification prevents bounce loops.
_________________________________________________________________
Release 3.0
page -47-
b i r d s o n g
WFS User Guide and Reference
Reference
_________________________________________________________________
For example, the request processor specified in the aliases file
could be "file-request" and the wfs.sender STATIC file statement
could be "fileserv".
WFS forms a directory path to the user directory wfs.sender. WFS
places files named "QDxxxxxx" (where: xxxxxx is a decimal number;
for example: QD000233) in this directory. Each queue file
represents a request for a single file.
The file QCONTROL is also placed in this directory. QCONTROL
contains data used by WFS's rate limiting features.
6.1.7 wfs.reply-to
WFS uses the wfs.reply-to STATIC file statement to construct the
mail header for both the session transcript and for mailed files.
WFS emits a "Reply-to:" line in the mail header using the data
specified by this statement. You must specify a fully qualified
path name, not just a user ID. This flexibility gives you the
ability to have a a reply go to a different site and ID than the
one serving as the file server.
For example:
wfs.reply-to : Customer-Service@Foo.Bar.Com
The specification of this statement is optional.
6.1.8 wfs.uuencode
WFS uses the wfs.uuencode STATIC file statement as the executable
name for the uuencode program. This should be the fully qualified
pathname of the uuencode program provided with the WFS
distribution. For example:
wfs.uuencode : c:/util/uuencode
WFS uuencodes files at the time the file is mailed.
6.1.9 wfs.uuencode.ext
The wfs.uuencode.ext STATIC file statement specifies a list of
file extensions that are always to be uuencoded by WFS for
sending these files.
For example, a reasonable specification for wfs.uuencode.ext
might be:
_________________________________________________________________
Release 3.0
page -48-
b i r d s o n g
WFS User Guide and Reference
Reference
_________________________________________________________________
wfs.uuencode.ext : com exe pak zip arc arj gif lzh lha
If you have a very long list of file extensions you want
uuencoded, you may have multiple wfs.uuencode.ext statements in
the STATIC file. Additional statements add to the list of file
extensions to be uuencoded for transmission.
To cause uuencoding of files with no file extension, specify
"NULL" on the wfs.uuencode.ext statement. For example:
wfs.uuencode.ext : zip zoo pak lzh NULL
If a /GET command in the message has coded uuencode or xxencode
on a file request, the user's specification takes precedence.
6.1.10 wfs.ascii.size
The wfs.ascii.size STATIC file statement specifies the number of
bytes an ascii file will be split into for mailing. Files larger
than this number will be split at the first new line character
following this number of bytes.
wfs.ascii.size : 33000
6.1.11 wfs.ascii.lines
The wfs.ascii.lines STATIC file statement specifies the number of
lines an ascii file will be split into for mailing. Files larger
than this number will be split at the first line following this
number of lines.
wfs.asciilines : 475
6.1.12 wfs.uuencode.lines
The wfs.uuencode.lines STATIC file statement specifies the number
of lines that uuencoded parts will be broken into.
This feature is provided because some mailers choke on files over
some arbitrary limit set by local system administrators.
The default number of lines for each part made by Richard Marks'
uuencode is 950 lines. This makes file parts about 60K. You may
have to experiment to get a file size that suits you.
_________________________________________________________________
Release 3.0
page -49-
b i r d s o n g
WFS User Guide and Reference
Reference
_________________________________________________________________
6.1.13 wfs.help
WFS uses the wfs.help STATIC file statement to locate the file it
mails in response to the HELP command. Specify a fully qualified
pathname. For example:
wfs.help : f:/waffle/user/fileserv/wfshelp.txt
6.1.14 wfs.filelist
WFS uses the wfs.filelist STATIC file statement to locate the
file it mails in response to the /DIR command. Specify a fully
qualified pathname. For example:
wfs.filelist : f:/public/filelist.txt
6.1.15 wfs.transcript
WFS uses the wfs.transcript STATIC file statement to locate the
file with which it begins the session transcript. The
"transcript" file is pre-pended to the session transcript.
Specify a fully qualified pathname. For example:
wfs.transcript : f:/waffle/user/fileserv/welcome.txt
6.1.16 wfs.notrans
By default, a transcript of the session is mailed to the message
originator. The "wfs.notrans" statement can be used to suppress
the transcript. wfs.notrans may be specified with a boolean
operator; e.g. true, false, 1, 0, yes, no. When not specified,
wfs.notrans defaults to "FALSE". When set to "TRUE" the session
transcript is NOT mailed to the message originator. For example:
wfs.notrans : true
If the requestor's message contains an error that causes the help
file to be included in the session transcript, the transcript is
mailed to the requestor, regardless of the wfs.notrans statement.
6.1.17 wfs.signature
WFS uses the wfs.signature STATIC file statement to locate the
file with which it ends the session transcript. The "signature"
file is appended to the session transcript. Specify a fully
qualified pathname. For example:
wfs.signature : f:/waffle/user/fileserv/signatur.txt
_________________________________________________________________
Release 3.0
page -50-
b i r d s o n g
WFS User Guide and Reference
Reference
_________________________________________________________________
6.1.18 wfs.errorlimit
wfs.errorlimit is the number of errors detected by WFSREQST in
the incomming message before he quits processing the message.
After wfs.errorlimit errors have been detected, the remainder of
the incomming message is flushed. For example:
wfs.errorlimit : 5
6.1.19 wfs.msglimit
The wfs.msglimit STATIC file statement specifies the number of
bytes of files that a mailed request may retrieve in a single
mail message. The specification is in thousands of bytes. For
example to limit a single mailed request to 600,000 bytes of
files, specify wfs.msglimit as:
wfs.msglimit : 600
If you do not specify the wfs.msglimit statement, WFS sets a
default of 500,000 bytes.
WFS keeps track of the number of bytes represented by each file
named (or implied) in a command in body of a message. He queues
each request until the limit is exceeded. For example, with the
limit set to 500,000 bytes, if previous commands total 380,000
bytes and the next command specifies a file 300,000 bytes long,
the request will be accepted.
6.1.20 wfs.daylimit
The wfs.daylimit STATIC file statement specifies the number bytes
of files that WFSSENDF will mail in response to queued requests
on a given date. The specification is in thousands of bytes. For
example: to limit the number of bytes mailed in response to
queued requests to 3 MBytes per day, specify the wfs.daylimit
statement as:
wfs.daylimit : 3000
If you do not specify the wfs.daylimit statement, WFS sets a
default of ten (10) times the value of the wfs.msglimit
statement.
WFS keeps track (in the QCONTROL file) of the number of bytes it
has mailed in response to requests for a given date.
_________________________________________________________________
Release 3.0
page -51-
b i r d s o n g
WFS User Guide and Reference
Reference
_________________________________________________________________
6.1.21 wfs.quelimit
The wfs.quelimit STATIC file statement specifies the number of
bytes represented by requests that WFS will accept. The
specification is in thousands of bytes. For example, to limit the
total of queued requests to 20 MBytes, specify wfs.quelimit as:
wfs.quelimit : 20000
If you do not specify the wfs.quelimit statement, WFS sets a
default of ten (10) times the value of the wfs.daylimit
statement.
When wfs.quelimit bytes of requests are already queued for
processing, and additional requests arrive, WFSREQST will reject
the request with an appropriate message.
6.1.22 wfs.enable.*
The wfs.enable.* STATIC file statement specifies a list of names
for built-in commands. By default, no WFS commands are recognized
in an incomming message unless the command is enabled and
assigned a name. For example, to enable all commands using its
base name code the following in your STATIC file:
wfs.enable.ping : ping
wfs.enable.cookie : cookie
wfs.enable.help : help
wfs.enable.get : get
wfs.enable.dir : dir
wfs.enable.newfiles : newfiles
wfs.enable.password : password
wfs.enable.join : join
wfs.enable.unjoin : unjoin
wfs.enable.archive : archive
wfs.enable.members : members
wfs.enable.addmember : addmember
wfs.enable.dropmember : dropmember
wfs.enable.digest : digest
wfs.enable.replyto : replyto
You may assign any name you wish for the command; the name need
not be the same as the base name for the command. You may also
assign more than one name for a command. For example to enable
the help command and assign multiple names to it, none of them
"help", code the following in your STATIC file:
wfs.enable.help : info information huh huh? what whazzat
_________________________________________________________________
Release 3.0
page -52-
b i r d s o n g
WFS User Guide and Reference
Reference
_________________________________________________________________
Should you want many names for the command, you may have multiple
wfs.enable.* statements for the same command. Continuing the
previous example:
wfs.enable.help : info information huh huh? what whazzat
wfs.enable.help : ? ?? ??? ???? duh duh? how how?
6.1.23 wfs.authexit
The wfs.authexit STATIC file statement specifies the fully
qualified pathname to a user supplied executable program. The
following example shows a specification for wfs.authexit.
wfs.authexit : c:\waffle\bin\authexit
See "Configuring an Authorization Exit Program" for a discussion
of how to configure an authorization exit program.
Both wfs.deny and wfs.authexit may be active at the same time.
6.1.24 wfs.automail
The wfs.automail STATIC file statement specifies a binding of a
user ID, aliased in Waffles ALIASES file to the WFSREQST program,
and a file to send when mail arrives at that address.
In addition to specifying wfs.automail in the STATIC file, a
statement must be placed in Waffle's ALIASES file to direct mail
to the WFSREQST program.
You may have as many different wfs.automail and ALIASES file
statements as you want, limited only be the available memory, and
Waffle's own limitations. Each pair (wfs.automail and alias) may
specify a different file to be sent.
There are two operands to the wfs.automail statement; syntax is:
wfs.automail : <aliasname> <filespec>
Where:
o <aliasname> is the alias statement in Waffle's ALIASES file,
o <filespec> is the fully qualified file specification of the
file to be sent when mail arrives at this alias.
For example, to configure both the aliases file and the STATIC
file to send the file "e\user\sendfile\wfsinfo.txt" to the sender
_________________________________________________________________
Release 3.0
page -53-
b i r d s o n g
WFS User Guide and Reference
Reference
_________________________________________________________________
when mail arrives for "WFS-Info-Request" at your site, first add
a statement to the ALIASES file as:
WFS-Info-Request | WFSREQST
Then add a statement to the STATIC file as:
wfs.automail : WFS-Info-Request e:\user\sendfile\wfsinfo.txt
The file "ALIASES.SMP", provided in the WFS package as a sample
ALIASES file, shows techniques for specifying aliases. See also:
"Extended Logging" on page 57; this topic describes some other
techniques for using aliases.
Requests received via this technique are queued for processing by
WFSSENDF.
6.1.25 wfs.automail.immediate
The "wfs.automail.immediate" STATIC file statement is similar to
the wfs.automail statement.
It differs in that the response (the requested file) is sent
immediately to the requestor.
Note that the rate limiting controls do not apply for mail
addressed to the address specified via the wfs.automail.immediate
statement.
6.1.26 wfs.command
The "wfs.command" STATIC file statement may be used by the SysOp
to create commands unique to that site. When the command is
detected in an input message, An associated command definition
file is used to control the execution of the command.
The operand of the wfs.command statement identifies first the
command name, second the associated command definition file. The
syntax for the wfs.command STATIC file statement is:
wfs.command : <commandname> <filename>
Commandname may be any string without embedded blanks, tabs or
newlines.
Filename should be filename only: no file extension, no path
specification. An file extension of .CDF is implied. For example:
_________________________________________________________________
Release 3.0
page -54-
b i r d s o n g
WFS User Guide and Reference
Reference
_________________________________________________________________
wfs.command : Do_What_I_Mean_Now dowhim
When the string "Do_What_I_Mean_Now" appears as the first token
on a line in the body of an incomming message, WFS will attempt
to execute the program or batch file defined in in the file
"dowhim.cdf" in the user directory defined for wfs.sender.
You may define as many wfs.command statements in your STATIC file
as available memory permits; each statement uses 16 bytes plus
the length of each operand. The file referenced is not
internalized until the named command is detected in an incomming
message.
For the fomat of the Command Execution Facility files and a
discussion of its use, see: "Remote Command Execution Facility"
on page 29.
6.1.27 wfs.maillist
The wfs.maillist STATIC file statement specifies a binding of a
user ID, aliased in Waffles ALIASES file to the WFSREQST program,
and a Mail List configuration. The syntax for the wfs.maillist
statement is:
wfs.maillist : <listname> <directory>
Where:
<listname> Is the name specified in Waffle's ALIASES file for
the Mailing List.
<directory> Is the name of a directory, under Waffle's USER
directory, containing the Mailing List's
configuration files.
For example, to define a mailing list named "test-list", Three
steps are required.
1. Define the wfs.maillist statement in Waffle's STATIC file as:
wfs.maillist : test-list testlist
Alias the Mailing List's name to the WFSREQST program; place
a statement in Waffle's ALIASES file like:
test-list | wfsreqst
_________________________________________________________________
Release 3.0
page -55-
b i r d s o n g
WFS User Guide and Reference
Reference
_________________________________________________________________
Create a directory in Waffle's USER directory tree named
"testlist".
In this directory you will need to create a file,
"maillist.cfg". The syntax for statements in this file are
described in "Mailing Lists" on page 33.
You may have as many "wfs.maillist" statements as available
memory will support.
_________________________________________________________________
Release 3.0
page -56-
b i r d s o n g
WFS User Guide and Reference
A Few Hints
_________________________________________________________________
Chapter 7
A Few Hints
This chapter focuses on a few hints to extend the capabilities
for WFS.
7.1 Extended Logging
The WFSLOG file in Waffle's ADMIN directory contains a history of
every transaction handled by the WFS programs. The records in
WFSLOG are terse by design. Should you have a requirement to log
ABSOLUTELY EVERYTHING. Then the following method is offered.
1. Create a local newsgroup with an access level higher than can
be seen by normal users; you may also use group access to
restrict access to WFS administrators only. For example,
create the local newsgroup "WFSHistory"
2. In the system alias file create an entry that is the target
for incomming mail addressed to WFS. Alias this ID to two
target IDs; like so:
archive-server WFS$Post WFS$SERVER
WFS$Post | post WFSHistory
WFS$SERVER | WFSREQST
Now all mail addressed to the ID "archive-server" will be posted
to the WFSHistory newsgroup, and will be read by the WFSREQST
program.
7.2 Testing WFS
When bringing up WFS for the first time, you will have to test
it. Since the program WFSREQST reads from stdin, you can
construct a mail message and feed it to WFSREQST from the MS-DOS
command line by re-directing the test message to stdin. For
example, create the file "testmsg". The minimum statements
required for a test message are:
_________________________________________________________________
Release 3.0
page -57-
b i r d s o n g
WFS User Guide and Reference
A Few Hints
_________________________________________________________________
From: user@site
To: server@right.here
<some wfs command>
To feed this test message to WFSREQST from the MS-DOS command
line, Establish Waffle's environment (set the WAFFLE environment
variable and include Waffle's bin directory in the PATH) and
issue the command:
WFSREQST <testmsg
To evaluate the output, look in the spool directory, in the sub-
directory for the site that would act as smarthost for the reply
address to the mail. The response to the request should be there.
If no mail is sent, check the WFSLOG file in the ADMIN directory.
There should be some messages indicating the source of the error.
7.3 Forging a Request
It happens to me all the time. Someone says, "How do I get file
QRZ.ZIP?"
Well, I know I have it. Instead of saying, "Send a request to my
archive-server,... blah blah blah."
I say, "I'll send it to you via email, uuencoded."
What I do is forge a piece of mail containing the request and
manually feed it to WFSREQST. Instead of editing a forged message
manually, I have a small batch file that does it all. The
following example contains its own documentation and should be
obvious. Use it as an example:
_________________________________________________________________
Release 3.0
page -58-
b i r d s o n g
WFS User Guide and Reference
A Few Hints
_________________________________________________________________
@echo on
:
: forge mail for wfs
:
: syntax: wfsforge <user> <file> [uue | xxe]
:
: --- validate input ---
if "%1" == "" goto syntax
if "%2" == "" goto syntax
:
: --- create forged message ---
:
echo From: %1 >f:\waffle\wfsforge.msg
echo To: archive-server@foo.bar.com >>f:\waffle\wfsforge.msg
echo Subject: The file you asked me for >>f:\waffle\wfsforge.msg
type c:\etc\blankln >>f:\waffle\wfsforge.msg
echo /get %2 %3 >>f:\waffle\wfsforge.msg
echo -- >>f:\waffle\wfsforge.msg
:
: --- mail it ---
:
wfsreqst <wfsforge.msg
goto done
:
: syntax error
:
:syntax
echo syntax error:
echo usage is: wfsforge user file [uue | xxe]
:done
Note: the file "c:\etc\blankln" contains a blank line.
_________________________________________________________________
Release 3.0
page -59-
b i r d s o n g
WFS User Guide and Reference
Messages
_________________________________________________________________
Chapter 8
Messages
WFS records his activity in the WFSLOG file in Waffle's ADMIN
directory. These messages represent normal activity, errors and
exceptions noted while doing his job.
Messages begin with a "seriousness" indication.
o Panic: alerts the system operator of a condition that has
caused a WFS program to abnormally terminate. This is bad
news. The current operation (mail message or queue file) may
have been lost or data corrupted. This needs immediate
attention.
o Error: alerts the system operator of some condition that
needs immediate attention.
o Warning: alerts the system operator of some condition that
may warrant attention.
o Info: is an information message.
o debug: are debug messages. These messages will appear only
when debug options are specified.
_________________________________________________________________
Release 3.0
page -60-
b i r d s o n g
WFS User Guide and Reference
_________________________________________________________________
Appendix A
A.1 Technical Support
Technical support is available via electronic mail and US mail.
Your comments and suggestions are very welcome.
Via US Mail, write to:
WFS Tech Support
The Birdsong Company
PO Box 2031
Sunnyvale, CA 94087-2031
Via email, write to:
tech-support@Birdsong.Suvl.CA.US
A.2 Known Problems
A list of known bugs in this and some previous releases of WFS
can be retrieved by sending email to:
WFS-buglist@Birdsong.Suvl.CA.US
A.3 Future Direction
Nothing Planned.
Gimme a hint!
_________________________________________________________________
Release 3.0
page -61-
b i r d s o n g
WFS User Guide and Reference
_________________________________________________________________
A.4 Acknowledgments
Waffle BBS is a product by Thomas E. Dell and Darkside
International.
Contact:
Thomas E. Dell
Darkside International
PO Box 4436
Mountain View, CA 94949-0436
via email: dell@vox.darkside.com
UUencode, is a product by Richard E. Marks.
Contact:
Richard Marks
931 Sulgrave Lane
Bryn Mawr, PA 19010
_________________________________________________________________
Release 3.0
page -62-
b i r d s o n g
WFS User Guide and Reference
_________________________________________________________________
This is the last page.
This page is intentionally left blank.
_________________________________________________________________
Release 3.0
page -63-